package org.linlinjava.litemall.db.util;

import java.time.Duration;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

/**
 * 补全日期工具类.
 *
 * @author linzp
 * @version 1.0.0
 * CreateDate 2020/5/11 17:13
 * description
 */
public final class CompletionDateUtils {

  /**
   * 隐藏构造方法.
   */
  private CompletionDateUtils() {
  }

  /**
   * 数据库查询出来的统计数据有时候日期是不连续的.
   * 但是前端展示要补全缺失的日期.
   * 此方法返回一个给定日期期间的所有日期字符串列表.
   * 具体在业务逻辑中去判断补全.
   *
   * @param startDate 开始日期
   * @param endDate   结束日期
   * @return
   */
  public static List<String> completionDate(
          LocalDateTime startDate,
          LocalDateTime endDate) {
    //日期格式化
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    List<String> dateList = new ArrayList<>();
    //遍历给定的日期期间的每一天
    for (int i = 0; !Duration.between(startDate.plusDays(i), endDate).isNegative(); i++) {
      //添加日期
      dateList.add(startDate.plusDays(i).format(formatter));
    }
    return dateList;
  }

  /**
   * 比较两个时间 时分秒 大小
   * @param s1
   * @param s2
   * @return
   */
  public static boolean compTime(String s1,String s2){
    try {
      if (s1.indexOf(":")<0||s1.indexOf(":")<0) {
        System.out.println("格式不正确");
      }else{
        String[]array1 = s1.split(":");
        int total1 = Integer.valueOf(array1[0])*3600+Integer.valueOf(array1[1])*60+Integer.valueOf(array1[2]);
        String[]array2 = s2.split(":");
        int total2 = Integer.valueOf(array2[0])*3600+Integer.valueOf(array2[1])*60+Integer.valueOf(array2[2]);
        return total1-total2>0?true:false;
      }
    } catch (NumberFormatException e) {
      // TODO Auto-generated catch block
      return true;
    }
    return false;

  }

  /**
   * main.
   *
   * @param args
   */
  /*public static void main(String[] args) {
    //测试过去30天
    completionDate(LocalDateTime.now().minusDays(29), LocalDateTime.now());
  }*/
}
